﻿/** ***********************************************************************************
* @file         mangpatio.c
* @brief    	国标808协议管理
* @details      主要用来处理808协议内容
* @author       
* @date         2021/5/27
* @copyright    北京高知科技有限公司    
* @version      V1.0
* @attention    无
**************************************************************************************/
#ifndef _MANGPATIO_H
#define _MANGPATIO_H

#include "fibo_opencpu.h"
#include "national_data_process.h"
#include "os_app.h"
#include "gaoz_api.h"

#define MANGPATIO_CTLOCK_APPEND       0x20

#define MANGPATIO_AUTH_APPEND         0x40
#define MANGPATIO_USER_AES_ENCRYPT		0	/*数据传输协议使用AES加密方式 1-使用加密 0-不使用加密*/

#pragma pack(1)
//终端参数
typedef struct { 
	uint8_t Subject;					//当做版本号
	uint8_t IP1Len;
	char IP1[64];
	uint8_t Port1Len;
	char Port1[5];
	uint8_t IP2Len;
	char IP2[64];
	uint8_t Port2Len;
	char Port2[5];
	uint8_t Mode;						//终端工作模式 
	uint8_t Voltage;					//电瓶电压
	uint8_t SpeedLimit;					//限速
	uint8_t ManageID[6];				//原来是4字节，现在改成6字节

	uint8_t	AuthCodeFlag;				//鉴权码，如果为A1代表已存储鉴权码，其它没有
	uint8_t  AuthCode[4];				//4字节鉴权码
	
	uint8_t heartBeatDly[4];			//终端心跳发送间隔，单位为秒（s）
	uint8_t idleReportMaxTime[4];		//休眠时汇报时间间隔，单位为秒（s）
	uint8_t workReportMaxTime[4];		//缺省时间汇报间隔，单位为秒（s）
	uint8_t idleReportMaxMeter[4];		//休眠时汇报距离间隔，单位为米（m），>0
	uint8_t workReportMaxMeter[4];		//缺省距离汇报间隔

	uint8_t crashTime;
	uint8_t crashG;
	uint8_t CarAngle[2];

	//最初：车辆里程表读数，1/10km
	//之后把这个参数改成了其它用途，暂时只是用了CarKm[0],CarKm[1]，用作电话拨号号码长度限制
	//如果CarKm[1] != 0x01 则设置CarKm[1] = 0x01，且CarKm[0] = 6；
	uint8_t CarKm[4];
	uint8_t rs[38];						//用来存储通信密钥
 
	uint8_t Check;

}mangpatio_info_t;

/***************************辅助平台休眠运行状态**********************************/
typedef enum
{
	SLEEP_WAKEUP_INIT = 0x00,			//休眠唤醒状态初始化
	SLEEP_STATE_RTC,					//休眠唤醒RTC初始化，30s唤醒时间进行心跳数据包发送
	SLEEP_STATE_TIME,					//休眠唤醒TIME初始化，10min唤醒时间进行报文数据包发送
	SLEEP_STATE_NET,					//休眠唤醒NET初始化，
}mangpatio_sleep_wakeup_state_e;

extern mangpatio_info_t	terinf;	
extern uint8_t mangpatio_broken_link;
/** ****************************************************************************
* @remarks       void mangpatior_create_task( unsigned portBASE_TYPE uxPriority )
* @brief         808数据处理任务
* @param[in]     uxPriority 优先级
* @param[out]    无
* @return        无
* @attention     在系统启动后进行创建
*******************************************************************************/
extern void mangpatio_create_task( unsigned portBASE_TYPE uxPriority );
/** ****************************************************************************
* @remarks       uint8_t mangpatio_ctlock_queue_put( national_net_res_msg_t *res_msg )
* @brief         发送控锁消息
* @param[in]     *res_msg 发送的数据地址
* @param[out]    无
* @return        1 发送数据成功 ，0 发送数据失败
* @attention     无
*******************************************************************************/
extern uint8_t mangpatio_ctlock_queue_put( national808_ctrllock_msg_t *res_msg );
/** ****************************************************************************
* @remarks       uint32_t national808_ctlock_queue_get( national808_ctrllock_msg_t *res_msg , uint32_t delay_time )
* @brief         获取控锁消息队列
* @param[in]     *res_msg 获取的数据地址
* @param[in]     delay_time 等待的时间
* @param[out]    无
* @return        pdPASS 接收数据成功 ，pdFAIL 接收数据失败
* @attention     无
*******************************************************************************/
extern uint32_t mangpatio_ctlock_queue_get( national808_ctrllock_msg_t *res_msg , uint32_t delay_time );
/** ****************************************************************************
* @remarks       uint8_t mangpatio_ctlock_res_queue_put( national_net_res_msg_t *res_msg )
* @brief         发送控锁响应消息
* @param[in]     *res_msg 发送的数据地址
* @param[out]    无
* @return        1 发送数据成功 ，0 发送数据失败
* @attention     无
*******************************************************************************/
extern uint8_t mangpatio_ctlock_res_queue_put( national808_ctrllock_msg_t *res_msg );
/** ****************************************************************************
* @remarks       uint8_t mangpatio_upgrade_queue_put( national_net_res_msg_t *res_msg )
* @brief         发送升级消息
* @param[in]     *res_msg 发送的数据地址
* @param[out]    无
* @return        1 发送数据成功 ，0 发送数据失败
* @attention     无
*******************************************************************************/
extern uint8_t mangpatio_upgrade_queue_put( update_result_t *res_msg );
/** ****************************************************************************
* @remarks       void mangpatio_socket_state_set(create_socket_state_e sta)
* @brief         网络状态
* @param[in]     无
* @param[out]    无
* @return        无
* @attention     无
*******************************************************************************/
extern void mangpatio_socket_state_set(create_socket_state_e sta);
/** ****************************************************************************
* @remarks       uint32_t saveminorip(mangpatio_info_t *info,uint8_t flag)
* @brief         存储参数表
* @param[in]     参数表，标记是否需要重启网络
* @param[out]    无
* @return        1失败 0成功
* @attention
*******************************************************************************/
extern uint32_t saveminorip(mangpatio_info_t *info,uint8_t flag);
/** ****************************************************************************
* @remarks       create_socket_state_e mangpatio_socket_state_get( void )
* @brief         获取网络状态
* @param[in]     无
* @param[out]    无
* @return        网络连接状态
* @attention     无
*******************************************************************************/
extern create_socket_state_e mangpatio_socket_state_get( void );

/** ****************************************************************************
* @remarks       void mangpatio_sleep_wakeup_state_set( mangpatio_sleep_wakeup_state_e st )
* @brief         辅助平台休眠唤醒状态设置
* @param[in]     st 休眠唤醒状态
* @param[out]    无
* @return        无
* @attention     无
*******************************************************************************/
extern void mangpatio_sleep_wakeup_state_set( mangpatio_sleep_wakeup_state_e st );

/** ****************************************************************************
* @remarks       mangpatio_sleep_wakeup_state_e mangpatio_sleep_wakeup_state_get( void )
* @brief         获取辅助平台休眠唤醒状态
* @param[in]     无
* @param[out]    无
* @return        休眠唤醒状态
* @attention     无
*******************************************************************************/
extern mangpatio_sleep_wakeup_state_e mangpatio_sleep_wakeup_state_get( void );


#endif

